/**
 * @author harry
 * @date 2022/2/27/22:47
 */

package com.serviceOrchestration.atomic;

import lombok.Getter;
import lombok.Setter;

import java.util.Map;

@Getter
@Setter
public abstract class AtomicUnit {

    protected AtomicUnit nextUnit = null;

    public boolean handleRequest(AtomicUnitContext context) {
        if(!doHandle(context)) {
            return false;
        }
        if(nextUnit != null) {
            return nextUnit.handleRequest(context);
        }
        return true;
    }

    /**
     * 设置原子服务的配置参数（如果有），例如限制的地域、用户标签等
     * @param params 可以为 {@code null}
     * @throws IllegalArgumentException 如果参数为 {@code null} 且原子服务需要配置参数
     */
    public void setParams(Map<String, Object> params) throws IllegalArgumentException {}

    protected abstract boolean doHandle(AtomicUnitContext context);
}
